As the complexity of computer systems has grown, the manner in which input/output operations are handled has become more complex, particularly as a result of a desire to increase the I/O throughput, without necessarily providing for corresponding increase in equipment complexity. A typical prior art arrangement provides a hardware channel which is adapted to be coupled directly to a Central Processing Unit, and also coupled to input/output (hereinafter I/O) controllers. In order to ensure effective and efficient use of equipment, a mechanism has long been needed for providing information to this Central Processing Unit (hereafter CPU) respecting the condition of selected I/O devices to enable the CPU to operate the I/O devices effectively. Initially, the channel mechanism was employed with control units of the type referred to as comprising only, or essentially only, hardware logic. A particular advantage of this type of control unit is that it is relatively fast in operation, a corresponding disadvantage is that control units for different I/O devices are different, thus necessitating the provision of different control units, and furthermore, the relatively generous use of hardware in these control units meant that this hardware was essentially unused when the associated I/O device was not in operation. Aside from these negative factors the hardware control units operated quite effectively. For example, typically each control unit included a status register to reflect the status of each attached I/O device, and thus if a single control unit was attached to plural I/O devices, then plural status registers were provided in the control unit. Interrogating the status of any particular I/O device, then merely required reading the contents of the associated status register which was accomplished relatively quickly. A subtle problem with this type of hardware control unit was the necessity for providing some type of interlock so that a channel did not attempt to read the status of a register while at the same time the condition of the register was being altered. Nevertheless, the hardware control unit did not detract from effective channel use because of speed limitations.
In an effort, however, to reduce the necessity for different control units for each different type of I/O device and at the same time to reduce overall hardware content, the prior art provided programmed control units. The programmed control unit approach is attractive from a number of view points. Since the same programmed control unit can be personalized in different fashions, by different program routines, the advent of the programmed control unit reduced the necessity for different control units for different types of I/O devices. At the same time, the programmed control unit could reduce total hardware complexity in that the personalization afforded by software (or firmware) allowed a specific piece of hardware (for example, a register) to carry out different functions at different times, under control of different portions of the program, for example. These advantages, however, were not obtained without paying a price, and the price paid for obtaining these advantages was a degredation of channel efficiency. The programmed control unit took significantly longer to respond to channel commands, than did the hardware control unit. The reduction in total hardware reduced the parallelism in the I/O operations and this also contributed to the reduction in speed and hence channel efficiency.
One particular problem which the prior art had not successfully dealt with related to the handling of "test I/O commands". This command is a status request for a particular I/O device which is identified by an address associated with the command. It may be generated by the CPU or it may be a channel generated command. In the essentially hardware control units, this command was readily responded to since it merely required reading the hardware register identified by the address associated with the command. Some programmed control units in the prior art did not support response to this command; those programmed control units would merely respond with a busy indication and take no further action. Of course, in those cases, the test I/O command would never be appropriately responded to.
In an effort to provide some response to this type of command, other forms of programmed control units were arranged to provide some limited support for this type of command. This latter type of prior art programmed control unit would initially respond to the test I/O command with a busy indication, but after one or more of the identical commands, the programmed control unit would make an attempt to locate the requested status, and if the channel did not present any other commands to the particular programmed control unit, interspersed with the test I/O command, the programmed control unit would eventually respond. That is, more particularly after one or more identical test I/O commands, the programmed control unit would locate the requested status and copy it into a selected register. Upon the next subsequent identical command the contents of that register would be presented to the channel. However, since the prior art programmed control units had limited hardware capability, the presence of this information in the selected register prevented a programmed control unit from carrying out any other tasks with respect to the channel. Without some mechanism for clearing this condition the entire system could be locked up, if the register contains status information which is not cleared because no further test I/O command is received. When this particular deficiency was recognized, an attempt was made to overcome the problem by providing a timeout in the programmed control unit, which would clear the selected register of the status information if the identical test I/O command was not received within the timeout period.
For example, one particular prior art programmed control unit, the IBM 3705 type I/IV channel adapter first required three test I/O commands before a test I/O sequence was initiated, then when the test I/O sequence was initiated, the requested status would be obtained, and a timer started to clear the requested status if not used within the timeout period. The program support, in the programmed control unit, for merely handling the test I/O command in this fashion was relatively extensive, and when the sequence was initiated it prevented the adapter from performing any other data or status transfers; the requirement for repeated identical commands reduced the efficiency of the channel, the procedure did not support stack status or asynchronous status requests, and the support provided for the test I/O command had very high program and I/O overhead.
It is therefore, one object of the present invention to provide a method and apparatus for improved I/O operations in connection with the use of channel equipment. It is another object of the present invention to provide such improved I/O operations, particularly with respect to the test I/O command in connection with a programmed control unit. It is still another object of the present invention to provide for such improved test I/O support with a programmed control unit which has relatively little impact on hardware count and complexity, but which greatly simplifies the programming and I/O overhead involved in supporting test I/O commands.
The manner in which the invention meets these and other objects, will become apparent as this description proceeds.